// 观察者模式是基于发布订阅模式的

class Subject {
    constructor(name) {
        this.name = name
        this.state = '开心'
        this.observers = [];
    }
    attach(o) {
        // 订阅事件
        this.observers.push(o)
    }
    setState(newState) {
        this.state = newState
        // 发布事件
        this.observers.forEach(o => o.update(this.name, newState))
    }
}
class Observer {
    constructor(name) {
        this.name = name
    }
    update(s, state) {
        console.log(this.name + ":" + s + '当前' + state)
    }
}

const s = new Subject('宝宝')

const o1 = new Observer('爸爸')

const o2 = new Observer('妈妈')

s.attach(o1)
s.attach(o2)
s.setState('不开心')
s.setState('又开心了')

// async function async1() {
//     console.log('async1 start')
//     await async2()
//     console.log('async1 end')
// }

// async function async2() {
//     console.log('async2')
// }

// console.log('script start')

// setTimeout(function(){
//     console.log('setTimeout')
// },0)

// async1();

// new Promise(function(resolve){
//     console.log('promise1')
//     resolve()
// }).then(function(){
//     console.log('promise2')
// })
// console.log('script end')